package 线程.等待唤醒机制;

public class eatFood extends Thread{
    //消费者的任务类
    /*

     */
    @Override
    public void run() {
        while (true){
            synchronized (Desk.lock){
                //1.判断有没有吃完
                //如果已经吃完了
                if (Desk.count==0){
                    System.out.println("消费者吃饱了,不吃了");
                    break;
                    //如果没有吃完
                }else {
                    //2.判断现在桌子上是否有食物
                    //如果没有食物
                    if (Desk.foodFlag==0){
                        //等待食物
                        try {
                            System.out.println("消费者等待吃饭");
                            Desk.lock.wait();
                        } catch (InterruptedException e) {
                            throw new RuntimeException(e);
                        }
                    }else {
                        //有食物
                        //减少食物的个数
                        Desk.count--;
                        System.out.println("正在吃饭，还能吃"+Desk.count+"碗");
                        //因为已经吃掉桌子上的食物了，改变桌子上食物的存在状态
                        Desk.foodFlag=0;
                        //已经没有食物了，唤醒厨师制作食物
                        System.out.println("消费者吃完了,让生产者做饭");
                        Desk.lock.notifyAll();
                    }
                }
            }
        }
    }
}
